/*
题目：一维数组与函数

操作要求： 
编写函数实现以下功能，并在主函数中调用：
1.检查整型数组中是否存在重复元素
2.计算字符串的长度
3.比较两个字符串是否相等
4.查找字符串中首次出现指定字符的位置
5.将字符串中的大写字母转换为小写字母 

核心思路：
①while循环实现循环调用
②空函数实现各项功能
③利用字符串结尾为'\0'辅助判定
④利用ASCII值对字符进行运算
⑤使用循环进行遍历 
*/

#include <stdio.h>
#define N 5
#define M 50

/*空函数实现整型数组中重复元素检测*/
void seek(){
	int a[N],i,j,t;
	printf("请输入五个整数：\n");
	for(i=0;i<N;i++)           //for循环实现整型数组的逐个输入 
		scanf("%d",&a[i]);
	
	t=0;
	for(i=0;i<N;i++)           //双循环实现各元素的两两比较，检测重复元素 
		for(j=0;j<N;j++){
			if(i==j)           //不用与自身比较 
				continue;
			if(a[i]==a[j])     //若相等则进行计数，辅助判定 
				t++;
		}
	if(t<=0)         //依据参数 t的值判定是否有重复元素 
		printf("数组中不存在重复元素。\n");
	else
		printf("数组中存在重复元素。\n");
}

/*空函数实现整型数组操作*/
void in(){
	int n;
	while(1){      //while循环实现各功能间循环调用
	printf("1.检查整型数组中是否存在重复元素 0.退出\n");
	printf("请选择操作：");
	
	scanf("%d",&n);
	if(n==0)      //if选择结构实现各功能调用 
		break;
	else if(n==1)
		seek();
	}
}

/*空函数实现字符串长度的计算*/
void len(){
	char a[M];
	int i;
	
	getchar();
	printf("请输入一个字符串：\n");
	gets(a);
	while(a[i]!='\0')       //while循环进行遍历并计数 
		i++;
	printf("该字符串长度为：%d。\n",i);
}

/*空函数实现两字符串的比较*/
void cmp(){
	char a[M],b[M];
	int i;
	
	getchar();
	printf("请输入字符串a:\n");	
	gets(a);
	printf("请输入字符串b:\n");
	gets(b);
	
	while(a[i]!='\0'&&b[i]!='\0'){      //while循环进行遍历 
		i++;
		if(a[i]<b[i]){                  //if选择结构输出两两比较结果 
			printf("字符串a小于字符串b。\n");
			i=0;                 //作为标记，辅助判定 
			break;
		}
		else if(a[i]>b[i]){
			printf("字符串a大于字符串b。\n");
			i=0;
			break;
		}
	}
	if(i>0)         //依据参数 i的值判定比较结果 
		printf("两个字符串相等。\n");
}

/*空函数实现字符串中首次出现指定字符的位置查找*/
void fin(){
	char a[M],b;
	int i;
	
	getchar();
	printf("请输入一个字符串：\n");
	gets(a);
	printf("请输入所需查找的字符：\n");
	b=getchar();
	
	i=0;
	while(a[i]!='\0'){     //while循环进行遍历 
		if(a[i]==b){       //判断两字符是否相等 
			i++;
			break;
		}
		i++;
	}
	if(i>0)
		printf("该字符首次出现于该字符串的第%d位。\n",i);
	else
		printf("该字符未出现过。\n");
}

/*空函数实现将字符串中的大写字母转换为小写字母*/
void lwr(){
	char a[M];
	int i;
	
	getchar();
	printf("请输入一个字符串：\n");
	gets(a);
	
	while(a[i]!='\0'){          //while循环实现遍历 
		if((a[i]>='A')&&(a[i]<='Z')){      //判定功能执行范围 
		a[i]=a[i]+32;
		i++;
		}
		else
			i++;
	}
	printf("转换后的字符串为：%s。\n",a);
}

/*空函数实现字符型数组操作*/
void ch(){
	int n;
	while(1){      //while循环实现各功能间循环调用
	printf("1.计算字符串长度 2.比较两个字符串 3.查找首次出现指定字符的位置 4.将大写字母转换为小写字母 0.退出\n");
	printf("请选择操作：");
	
	scanf("%d",&n);
	switch(n){              //switch选择结构实现实现各功能调用  
		case 1:len();break;
		case 2:cmp();break;
		case 3:fin();break;
		case 4:lwr();
	}
	if(n==0)
		break;
	}
}

int main(){
	int n;
	
	while(1){      //while循环实现各功能间循环调用
	printf("1.整型数组 2.字符型数组 0.退出\n");
	printf("请选择操作：");
	
	scanf("%d",&n);
	switch(n){              //switch选择结构实现实现各功能调用 
		case 1:in();break;
		case 2:ch();
	}
	if(n==0)
		break;
	}
	return 0;
}

